Microprocessor designers spend much effort on performance analysis. After architecting a microprocessor with a base set of features and performance targets based on previous generations of microprocessors, they execute a representative sample of the software applications that matter most to their customers and capture instruction execution traces of the software applications. They then use the captured traces as stimulus to simulate the operation of the microprocessor being designed. They may configure different characteristics of the simulated microprocessor in an effort to achieve the highest aggregate performance across all of the target software applications. Often, a particular configuration of characteristics is desirable for one target application and undesirable for another. In these cases, the designers make a decision as to which software application is more important, or find another approach that attempts to balance the needs of the multiple software applications. The choice often does not achieve the optimal performance of the target software applications since it may attempt to optimize the performance of one software application at the expense of another software application.
Once the best average set of configuration settings has been identified, the microprocessor designers code them into the design with VHDL or Verilog code, for example. Other microprocessors improve on the hardcoded configuration by including a bank of fuses in the microprocessor that may be selectively blown during manufacturing of the microprocessor to alter the configuration settings from their hardcoded values. This allows the microprocessor a limited degree of optimization in manufacturing, perhaps in response to new software applications or operating systems introduced after the microprocessor was designed. However, this solution still does not achieve the optimal performance of the target software applications in that it requires the designer/manufacturer to choose a configuration optimized for some applications at the expense of other applications, or to choose a balanced configuration that is likely not optimized for any applications.
To address this problem, U.S. Pat. No. 8,566,565, which is hereby incorporated by reference in its entirety for all purposes, describes a microprocessor that may be dynamically configured into multiple operating modes by a device driver based on the currently running applications. Additionally, U.S. patent application Ser. No. 14/050,687, filed Oct. 10, 2013, which claims priority to U.S. Provisional Application No. 61/880,620, filed Sep. 20, 2013, each of which is hereby incorporated by reference in its entirety for all purposes, describes a dynamically reconfigurable microprocessor. However, a need for even greater performance optimization is realized.